package org.nahtanoj.contacts.servlets;

import java.io.IOException;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ContactSync extends HttpServlet {
	public static String id = ""; // "" - idle otherwise the unique update session id
//	private static final Logger log = Logger.getLogger(ContactSync.class.getName());
//	private static boolean matched = false;
//	private static final String paramUpdateId = "updateId";
	private static final long serialVersionUID = 6499778328880207619L;

//	private void beginUpdate(HttpServletResponse resp, String user) {
//		log.warning("Authenticated:" + user);
//		try {
//			ContactSpreadsheet contacts = new ContactSpreadsheet();
//			ContactEditor ce = new ContactEditor();//"jandcmoore", "f");
//			ce.saveContacts(contacts);
//			log.info("Done:" + ce.getFaults().size() + " faults");
//			if (ce.getFaults().size() != 0) {
//				for (Fault f : ce.getFaults()) {
//					log.warning(f.toString());
//				}
//			}
//			ce = new ContactEditor();//"candjmoore", "g");
//			ce.saveContacts(contacts);
//			log.info("Done:" + ce.getFaults().size() + " faults");
//			if (ce.getFaults().size() != 0) {
//				for (Fault f : ce.getFaults()) {
//					log.warning(f.toString());
//				}
//			}
//		} catch (ServiceException e) {
//			log.warning("ServiceException:" + e.getLocalizedMessage());
//		} catch (IOException e) {
//			log.warning("IOException:" + e.getLocalizedMessage());
//		}
//	}

	@Override
	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws IOException {
//		if (isAuth(req, resp) == true) {
//			String requestUpdateId = req.getParameter(paramUpdateId);
//			if (id.equals("")) { // No request in progress
//				id = "" + Math.random();
//				cs = new Contacts();
//				scs = new SContacts();
//				// Queue sheetloader and googleloader
//				// they requeue this servlet with contactSync?updateId=updateId&action=match
//				Queue queue = QueueFactory.getDefaultQueue();
//				queue.add(TaskOptions.Builder.withUrl("/spreadsheet").method(Method.GET).
//						param(paramUpdateId, id));
//				queue.add(TaskOptions.Builder.withUrl("/mailcontact").method(Method.GET).
//						param(paramUpdateId, id));
//
//			} else {
//				if (id.equals(requestUpdateId)) {
//					// The sheetLoader and googleLoader finished
//					// Do matching and create sheet update, google update and errors
//					if (matched == false) {
//						// Queue sheetUpdate and googleUpdate
//						// they requeue this servlet with contactSync?updateId=updateId
//						match();
//						Queue queue = QueueFactory.getDefaultQueue();
//						queue.add(TaskOptions.Builder.withUrl("/spreadsheet").method(Method.GET).
//								param(paramUpdateId, id));
//						queue.add(TaskOptions.Builder.withUrl("/mailcontact").method(Method.GET).
//								param(paramUpdateId, id));
//						matched = true;
//					} else {
//						// Send error email
//						matched = false;
//						requestUpdateId = "";
//					}
//				} else {
//					log.warning("Mismatching updateId");
//				}
//			}
//		}
	}

//	private boolean isAuth(HttpServletRequest req, HttpServletResponse resp)
//		throws IOException {
//		boolean isAuthorised = false;
//	    UserService userService = UserServiceFactory.getUserService();
//	    User user = userService.getCurrentUser();
//	    if (user != null) {
//			log.info(user.getNickname());
//	    	if (user.getNickname().equals("JandCMoore") ||
//	    			user.getNickname().equals("CandJMoore")) {
//	    		isAuthorised = true;
//	    	}
//	    } else {
//	    	if (req.getHeader("X-AppEngine-Cron") != null) {
//	    		isAuthorised = true;
//	    	} else {
//	        	resp.sendRedirect(userService.createLoginURL(req.getRequestURI()));
//	    		log.info("Null user");
//	    	}
//	    }
//		return isAuthorised;
//	}

	// Populates sheetNew and contactUpdates
//	private void match() {
//		sheetNew = new ArrayList<SContact>();
//		contactUpdates = new ArrayList<Contact>();
//
//		for (Contact c : cs.getContacts()) {
//			SContact sc = scs.updateContact(c);
//			if (sc != null) {
//				sheetNew.add(sc);
//				contactUpdates.add(c); // ID updated
//			}
//		}
//		for (SContact sc : scs.getContacts()) {
//			Contact c = cs.updateContact(sc);
//			if (c != null) {
//				contactUpdates.add(c);
//			}
//		}
//	}
}